//虚函数
#include <iostream>
using namespace std;

//哺乳动物
class Mammal
{
public:
    virtual void sound(){cout << "发出某种声音" << endl;}
};

class Dog : public Mammal
{
public:
    virtual void sound(){cout << "汪汪汪！" << endl;}
};

class Cat : public Mammal
{
public:
    virtual void sound(){cout << "喵喵喵~" << endl;}
};

// void feed(Cat &c)
// {
//     c.sound();
// }

// void feed(Dog &d)
// {
//     d.sound();
// }
class Whale : public Mammal
{
public:
    virtual void sound(){cout << "鲸鱼唱歌！" << endl;}
};

//处理哺乳动物叫的一切事务
void feed(Mammal &m)
{
    m.sound();
}



int main(int argc, char const *argv[])
{
    Cat c;
    Dog d;

    feed(c);
    feed(d);

    Whale w;
    feed(w);

    return 0;
}

//虚函数不要写在类外，可以在类外写函数，但不能在出现virtual关键字
